﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Windows;
using System.Windows.Controls;

namespace ZTZP_BEMSS_WPF
{
    /// <summary>
    /// CalculationParameters.xaml 的交互逻辑
    /// </summary>
    /// 
    public partial class CalculationParameters02 : Window, INotifyPropertyChanged
    {
        // 静态字段来保存唯一实例
        private static CalculationParameters02 _instance;
        // 提供全局访问点，确保只创建一个实例
        public static CalculationParameters02 Instance
        {
            get
            {
                if (_instance == null)
                {
                    _instance = new CalculationParameters02();
                }
                return _instance;
            }
        }

        private CalculationParameters02()
        {
            InitializeComponent();
            // 初始化数据
            BuildingTypes = new List<string>
        {
            "房屋建筑工程",
            "装饰装修、建筑幕墙及钢结构工程",
            "机电安装工程",
            "市政工程",
            "绿化工程"
        };
            SelectedBuildingType = BuildingTypes[0];//默认选中“房屋建筑工程”

            ProvinceTypes = new List<string>//dpftodo 以后添加省份只要在这里添加就可以了，流程已经设置好了，界面会自动变化
        {
            "江苏",
            "云南",
        };
            SelectedProvinceType = ProvinceTypes[0];//默认选中“江苏”
            BidControlPrice = 2500;//这种方式不行需要设置位TwoWay，值变了界面显示的也变
            // 设置 TextBox 的初始值
            //TenderColPrice_Double.Text = "100.66";  // 招标控制价设置初始值
            //_FloatingRate = new List<int> { };//下浮率默认为空
            //DataContext 是一个非常重要的概念，通常用于绑定视图（UI元素）和数据（类中的属性）。
            //this.DataContext = this; 这一行代码的作用是将 当前类（即 CalculationParameters02）作为 数据上下文，使得该类中的属性能够与 XAML 中的控件进行绑定。
            this.DataContext = this;//将 DataContext 设置为 this，表示窗口中的所有控件都可以直接绑定到 CalculationParameters02 类中的属性。
        }

        #region 1、数据绑定
        private string _selectedBuildingType;//被选择的建筑类型
        private List<string> _buildingTypes;//所有的建筑类型集合
        private string _selectedProvince;//被选择的省份
        private List<string> _ProvinceTypes;//所有的省份
        private List<int> _FloatingRate;//下浮率Δ
        private double _BidControlPrice;//招标控制价
        public event PropertyChangedEventHandler PropertyChanged;
        // 实现 INotifyPropertyChanged
        protected void OnPropertyChanged(string name)
        {
            // 触发 PropertyChanged 事件
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
        }
        #region 1、建筑类型和被选的建筑类型
        //BuildingTypes 是一个集合（例如 List<string>），其中包含了多个字符串，
        //每个字符串代表一个ComboBox x:Name="BuildingType_Str" 的选项。
        public List<string> BuildingTypes//所有的建筑类型集合
        {
            get { return _buildingTypes; }
            set
            {
                _buildingTypes = value;
                OnPropertyChanged(nameof(BuildingTypes));
            }
        }
        public string SelectedBuildingType//被选择的建筑类型
        {
            get { return _selectedBuildingType; }
            set
            {
                _selectedBuildingType = value;
                OnPropertyChanged(nameof(SelectedBuildingType));
                //不同的建筑类型设置不同的下浮率
                ChangeFloatingRateByBuildingType(_selectedBuildingType);
                // 弹出消息框显示当前选中的建筑类型
                // MessageBox.Show($"当前选择的建筑类型是: {_selectedBuildingType}");
            }

        }
        #endregion 建筑类型和被选中的建筑类型

        #region 2、省份类型和被选中的省份类型
        public List<string> ProvinceTypes//所有的省份
        {
            get { return _ProvinceTypes; }
            set
            {
                _ProvinceTypes = value;
                OnPropertyChanged(nameof(ProvinceTypes));
            }
        }

        public string SelectedProvinceType//被选择的省份
        {
            get { return _selectedProvince; }
            set
            {
                _selectedProvince = value;
                OnPropertyChanged(nameof(SelectedProvinceType));
                //MessageBox.Show($"当前选择的省份是: {_selectedProvince}");
            }
        }
        #endregion

        #region 3、招标控制价
        public double BidControlPrice 
        {   get { return _BidControlPrice; }
            set
            {
                _BidControlPrice = Math.Round(value, 2);
                OnPropertyChanged(nameof(BidControlPrice));
            }
        }
        private void TenderColPrice_Double_PreviewTextInput(object sender, System.Windows.Input.TextCompositionEventArgs e)
        {
            // 正则表达式，限制只输入数字和小数点
            var regex = new System.Text.RegularExpressions.Regex("[^0-9.]");
            e.Handled = regex.IsMatch(e.Text); // 如果输入的是非数字或小数点，则取消输入

            // 防止多个小数点的输入
            if (e.Text == "." && (sender as TextBox).Text.Contains("."))
            {
                e.Handled = true; // 如果已经有一个小数点，则不允许再输入
            }
        }

        #endregion 3、招标控制价


        #endregion 数据绑定


        //上一步
        private void CalParPreviousButton_Click(object sender, RoutedEventArgs e)
        {
            // 获取 StartUpImageDialog01 的单例实例并显示
            StartUpImageDialog01 SUID = StartUpImageDialog01.Instance;

            // 如果窗口没有显示，则显示
            if (!SUID.IsVisible)
            {
                // 计算窗口的位置，使得 StartUpImageDialog01 的中心在当前窗口的中心
                SUID.Left = this.Left + (this.Width - SUID.Width) / 2;
                SUID.Top = this.Top + (this.Height - SUID.Height) / 2;
                SUID.Show();
            }

            this.Hide(); // 关闭当前窗口
        }
        //下一步
        private void CalParNextButton_Click(object sender, RoutedEventArgs e)
        {
            // 获取 BidQuotePrice03 的单例实例
            BidQuotePrice03 BQP03 = BidQuotePrice03.Instance;
            // 设置 FloatingRate 属性
            BQP03.InitBidQuotesFloatRate(_FloatingRate, BidControlPrice);//这一步是为了计算投标报价相对于招标控制价的下浮率
            //BQP03.FloatingRate_List = _FloatingRate;//下浮率Δ
            //BQP03.BidControlPrice = BidControlPrice;//招标控制价
            // 如果窗口没有显示，则显示它
            if (!BQP03.IsVisible)
            {
                // 计算窗口的位置，使得 BidQuotePrice03 的中心在当前窗口的中心
                BQP03.Left = this.Left + (this.Width - BQP03.Width) / 2;
                BQP03.Top = this.Top + (this.Height - BQP03.Height) / 2;
                BQP03.Show();
            }

            // 隐藏当前窗口，而不是关闭它
            this.Hide();
        }
        public string GetCurrentBuildingType()//获取选择的建筑类型
        {
            return _selectedBuildingType;
        }

        public string GetCurrentProvinceType()//获取选择的省份类型
        {
            return _selectedProvince;
        }
        //根据建筑类型设置不同的下浮系率Δ
        public void ChangeFloatingRateByBuildingType(string selectedBuildingType)
        {
            if (_FloatingRate == null)
            {
                _FloatingRate = new List<int>();
            } 
                
            _FloatingRate.Clear();
            if (selectedBuildingType== BuildingTypes[0])//"房屋建筑工程",
            {
                _FloatingRate = new List<int> { 6,7, 8, 9, 10,11,12 };
              }
            else if (selectedBuildingType == BuildingTypes[1])// "装饰装修、建筑幕墙及钢结构工程",
            {
                _FloatingRate = new List<int> { 8, 9, 10, 11, 12 ,13,14,15};
            }
            else if (selectedBuildingType == BuildingTypes[2])//"机电安装工程",
            {
                _FloatingRate = new List<int> { 10, 11, 12, 13, 14, 15 ,16,17};
            }
            else if (selectedBuildingType == BuildingTypes[3])// "市政工程",
            {
                _FloatingRate = new List<int> { 15, 16, 17,18,19,20,21,22,23 };
            }
            else if (selectedBuildingType == BuildingTypes[4])// "绿化工程"
            {
                _FloatingRate = new List<int> { 17, 18, 19, 20, 21, 22, 23,24,25,26 };
            }
        }
    }
}
